package Negocio;

import javax.persistence.*;

import DTO.ClienteEmpresaVO;
import DTO.CuentaCorrienteVO;
import DTO.DireccionVO;
import SRV.CuentaCorrienteSRV;
import SRV.DireccionSRV;

@Entity
@DiscriminatorValue("empresa")
public class Empresa extends Cliente
{
	@Column (name="razonSocial")
	private String razonSocial;
	@Column (name="cuit")
	private long cuit;
	@OneToOne(cascade = CascadeType.ALL)
	@JoinColumn(name="numeroCuenta")
	private CuentaCorriente cc;
	
	public Empresa(Direccion direccion, String razonSocial,long cuit, CuentaCorriente cc) 
	{
		super(direccion);
		this.razonSocial = razonSocial;
		this.cuit = cuit;
		this.cc = cc;
	}
	
	public Empresa toBusiness(ClienteEmpresaVO empresaVO) 
	{
	    CuentaCorriente cuentaCorriente = new CuentaCorriente();
	    
	    Direccion direccion = new Direccion();
	    DireccionSRV daoDir =  new DireccionSRV();
	    direccion = daoDir.getDireccion(empresaVO.getDireccion());

	    CuentaCorrienteSRV daoCC = new CuentaCorrienteSRV();
//	    cuentaCorriente =  daoCC.getCuentaCorriente(empresaVO.getCuentaCorriente());
	    
	    
	    Empresa devuelto = new Empresa(direccion, empresaVO.getRazonSocial(), empresaVO.getCuit(), cuentaCorriente);
	    
	    return devuelto;
	}
	
	public Empresa toBusiness(ClienteEmpresaVO eVO, DireccionVO dVO, CuentaCorrienteVO cVO) 
	{
		CuentaCorriente cc = new CuentaCorriente();
		cc.toBusiness(cVO);
		//Cargo Direccion
		Direccion dire = new Direccion();
		dire.toBusiness(dVO);
		//Cargo Empresa
		Empresa empr = new Empresa();
		
	    Empresa devuelto = new Empresa(dire, empr.getRazonSocial(), empr.getCuit(), cc);
	    return devuelto;
	}

	public Empresa() {super();}

	public String getRazonSocial() {
		return razonSocial;
	}

	public void setRazonSocial(String razonSocial) {
		this.razonSocial = razonSocial;
	}

	public long getCuit() {
		return cuit;
	}

	public void setCuit(long cuit) {
		this.cuit = cuit;
	}

	public CuentaCorriente getCc() 
	{
		return cc;
	}

	public void setCc(CuentaCorriente cc) {
		this.cc = cc;
	}

	public ClienteEmpresaVO toVO() {
		ClienteEmpresaVO auxVO = new ClienteEmpresaVO(this.getIdCliente(), this.getDireccion().getIdDireccion(), this.razonSocial, this.cuit, this.getCc().getNumeroCuenta());
		return auxVO;
	}
	
	public boolean esClienteParticular(){
		return false;
	}
	
	public boolean esEmpresa(){
		return true;
	}
	
	
	//Busca por CUIT, no por ID
	public boolean sosLaEmpresa(long cuit2){
	    if (getCuit() == cuit2)
		return true;
	    return false;
	}
	
	public CuentaCorriente getCtaCte(){
		return this.cc;
	}
}
